home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-08-15 | 48.0 KB | 2,479 lines |
- * GET SCREEN PHYSICAL BASE ADDRESS
- * Returns base address in D0
- *==================================
- get_scrn_base: macro
- move.w #2,-(a7)
- trap #14
- addq.l #2,a7
- endm
- *SOUND MACROS
- *=================
-
- sound macro
- move.w \1,d0
- bsr sndcom
- endm
- music_on: macro
- bsr smp_cmnd
- endm
- music_off: macro
- lea.l zeros(pc),a0
- move.l a0,p_sam
- endm
- *GRAPHIC MACROS
- *=================================
-
- * 1) draw x1,y1,x2,y2
- *-------------------------
- draw: macro
- bsr linea
- move.w \1,x1(a0)
- move.w \2,y1(a0)
- move.w \3,x2(a0)
- move.w \4,y2(a0)
- bsr dline
- endm
- undraw: macro
- bsr linea
- move.w \1,x1(a0)
- move.w \2,y1(a0)
- move.w \3,x2(a0)
- move.w \4,y2(a0)
- bsr undline
- endm
- bdraw: macro
- bsr linea
- move.w \1,x1(a0)
- move.w \2,y1(a0)
- move.w \3,x2(a0)
- move.w \4,y2(a0)
- bsr bdline
- endm
-
- * 2) bar x1,y1,x2,y2
- *---------------------------
- bar: macro
- bsr linea
- move.w \1,x1(a0)
- move.w \2,y1(a0)
- move.w \3,x2(a0)
- move.w \4,y2(a0)
- bsr dbar
- endm
-
- * 3) fill_s patern
- fill_s: macro
- bsr linea
- move.l \1,patptr(a0)
- endm
-
- * 4) cls
- cls: macro
- bsr clrscr
- endm
-
- * 5) mouse on/off
- mouse_on: macro
- dc.w $a009
- endm
- mouse_off: macro
- dc.w $a00a
- endm
- * 6) set a colour register
- pallete: macro
- move.w #\1,d0
- move.w #\2,d1
- bsr colset
- endm
- * 7) plot x,y
- plot: macro
- move.w \1,d0
- move.w \2,d1
- move.w \3,d2
- bsr rplot
- endm
- * 8) print '<string>'
- print: macro
- lea.l x\@(pc),a0
- bsr prnt
- bra y\@
- x\@ dc.b \1,$0a,$0d,0
- cnop 0,2
- y\@ nop
- endm
- locate: macro
- lea.l x\@(pc),a0
- bsr prnt
- bra y\@
- x\@ dc.b 27,'Y',\2+32,\1+32,0
- cnop 0,2
- y\@ nop
- endm
- nprint: macro
- move.l \1,d0
- bsr prtdec
- endm
- home: macro
- move.w #27,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- move.w #'H',-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- endm
- invert macro
- move.w #27,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- move.w #'p',-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- endm
- normal macro
- move.w #27,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- move.w #'q',-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- endm
- * 9) pget x,y
- pget: macro
- move.w \1,d0
- move.w \2,d1
- bsr rpget
- endm
-
- *Shink Memory Allocation to size
- * Must go at start of program, so not terminated by RTS.
- *=======================================================
- shr_mall:
- move.l 4(a7),a6
- move.l #20000,-(a7) *Size to be kept (program+stack+vars)
- move.l a6,-(a7)
- move.w #0,-(a7)
- move.w #$4A,-(a7)
- trap #1
- add.l #12,a7
- *INSTALL SCREEN BASE
- get_scrn_base
- move.l d0,sb
- lea.l bitblt(pc),a6
- move.l sb,32(a6)
- *INITIALISATION BLOCK
- cls
- bsr injoy
- bsr init_blocks
- bsr load_data
- *sampled music routines
- lea.l music(pc),a0
- bsr sample_init
- bra title_page
-
- *GAME ROUTINE (MAINLOOP) START
- start move.l screen1,this_screen
- move.w #1,screen_num
- move.w #3,lives
- move.w #600,fuel
- move.l #0,score
- gs_start:
- bsr init_vars
- bsr draw_screen
- lea.l joyp0(pc),a0
- addq.w #1,a0
- move.b #0,(a0)
- mainloop:
- lea.l joyp0(pc),a0
- addq.w #1,a0
- move.b (a0),d5
- bsr check_for_ground
- move.w sx,d0
- move.w sy,d1
- btst #0,d5
- beq jjp1
- subq.w #1,d1
- sub.w #1,fuel
- btst.b #0,prev_dir
- bne jjp1
- movem.l d0/d1/d5,-(a7)
- sound #2
- movem.l (a7)+,d0/d1/d5
- jjp1 btst #1,d5
- beq jjp2
- addq.w #2,d1
- jjp2 btst #2,d5
- beq jjp3
- subq.w #2,d0
- jjp3 btst #3,d5
- beq jjp4
- addq.w #2,d0
- jjp4 btst #7,d5 *if fire then check for cheat
- bne cheat
- jjp4a btst.b #0,prev_dir
- beq jjp5
- btst #0,d5
- bne jjp5
- addq.w #2,d1
- movem.l d0/d1/d5,-(a7)
- sound #0
- movem.l (a7)+,d0/d1/d5
- jjp5 move.b d5,prev_dir
- movem.w d0-d1,-(a7)
- bsr vbi
- movem.w (a7)+,d0-d1
- cmp.w sx,d0
- bne udate
- cmp.w sy,d1
- bne udate
- rtudate bsr vbi
- cmp.w #2,extras
- beq rtudatej1
- bsr ualiens
- rtudatej1:
- cmp.w #1,extras
- beq rtudatej2
- bsr check_death
- cmp.w #1,d4
- beq lose_life
- rtudatej2:
- bsr ufuel
- cmp.w #0,fuel
- beq lose_life
- bsr check_item
- cmp.w #0,item_count
- beq finish_screen
- bra mainloop
-
- *CHEAT MODE
- cheat movem.l d0/d1/d5,-(a7)
- lea.l cheat_code(pc),a5
- move.b (a5)+,d5
- cheatlp bsr inkey
- clr.l d5
- cmp.w #0,d0
- beq cheatlp
- or.w #32,d0
- move.b (a5)+,d5
- cmp.w #255,d5
- beq enable_cheat
- cmp.w d5,d0
- beq cheatlp
- movem.l (a7)+,d0/d1/d5
- bra jjp4a
- enable_cheat:
- movem.l (a7)+,d0/d1/d5
- bra finish_screen
-
- *UPDATE FUEL INDICATOR AND SCORE ( & HI SCORE)
- ufuel undraw #156,#156,#305,#156
- undraw #156,#157,#305,#157
- move.w fuel,d5
- lsr.w #2,d5
- add.w #150,d5
- draw #156,#156,d5,#156
- draw #156,#157,d5,#157
- move.l score,d0
- cmp.l last_score,d0
- beq eufuel
- cmp.l hiscore,d0
- blt ufuelj1
- invert
- move.l score,hiscore
- locate 34,0
- nprint hiscore
- normal
- ufuelj1 home
- nprint score
- move.l score,last_score
- eufuel rts
-
- *LOSE A LIFE
- lose_life:
- bsr check_item
- bsr vbi
- cmp.w #0,collector
- bne lose_life
- move.w #8,palien
- move.w #600,fuel
- sound #5
- lose_loop:
- move.l wormdie,a0
- move.w sx,d0
- move.w sy,d1
- bsr sprite
- bsr vbi
- bsr vbi
- bsr vbi
- bsr vbi
- sub.w #1,palien
- cmp.w #0,palien
- bne lose_loop
- sub.w #1,lives
- cmp.w #0,lives
- beq game_over
- bra gs_start
-
- *GAME OVER
- game_over:
- bsr vbi
- cls
- draw #9,#9,#311,#9
- draw #9,#9,#9,#151
- draw #9,#151,#311,#151
- draw #311,#151,#311,#9
- move.l logo,a0
- move.w #30,d0
- move.w #160,d1
- bsr sprite
- bsr vbi
- move.w #120,d0
- move.w #50,d1
- move.l gameover,a0
- bsr sprite
- move.w #500,d5
- wait_gover:
- bsr vbi
- dbra d5,wait_gover
- bra title_page
-
- *FINISH SCREEN
- finish_screen:
- bsr check_item
- bsr vbi
- cmp.w #0,collector
- bne finish_screen
- bsr vbi
- cmp.w #25,screen_num
- beq end_game
- cls
- draw #9,#9,#311,#9
- draw #9,#9,#9,#151
- draw #9,#151,#311,#151
- draw #311,#151,#311,#9
- move.l logo,a0
- move.w #30,d0
- move.w #160,d1
- bsr sprite
- bsr vbi
- move.w #120,d0
- move.w #50,d1
- move.l welldone,a0
- bsr sprite
- move.w #250,d5
- wait_finish:
- bsr vbi
- dbra d5,wait_finish
- move.l next_screen,this_screen
- add.w #1,screen_num
- bra gs_start
-
- *UPDATE SCREEN DISPLAY
- *worm display
- udate cmp.w sx,d0
- blt udj1
- move.l wormr,a0
- udj1 cmp.w sx,d0
- bgt udj2
- move.l worml,a0
- udj2 cmp.w sy,d1
- beq udj4
- blt udj3
- cmp.w sx,d0
- bne udj4
- move.l wormd,a0
- bra udj4
- udj3 move.l wormu,a0
- udj4 move.w d0,sx
- move.w d1,sy
- move.l a0,-(a7)
- move.l (a7)+,a0
- move.w sx,d0
- move.w sy,d1
- bsr sprite
- bra rtudate
-
- *udate alien locations and display
- ualiens move.l alien_blok,palien
- al_loop move.l palien,a5
- move.l (a5)+,a0
- cmp.l #0,a0
- beq eal_loop
- clr.l d2
- move.w 12(a5),d2
- move.w 8(a5),d0
- move.w 4(a5),d1
- cmp.w (a5),d0
- bne al_jp1
- btst.l #1,d2
- beq al_jp1
- bclr.l #1,d2
- bset.l #0,d2
- al_jp1 cmp.w (a5),d1
- bne al_jp2
- btst.l #0,d2
- beq al_jp2
- bclr.l #0,d2
- bset.l #1,d2
- al_jp2 move.w 10(a5),d0
- move.w 6(a5),d1
- cmp.w 2(a5),d0
- bne al_jp3
- btst.l #3,d2
- beq al_jp3
- bclr.l #3,d2
- bset.l #2,d2
- al_jp3 cmp.w 2(a5),d1
- bne al_jp4
- btst #2,d2
- beq al_jp4
- bset.l #3,d2
- bclr.l #2,d2
- al_jp4 move.w d2,12(a5)
- btst.l #0,d2
- beq al_jp5
- subq.w #1,(a5)
- al_jp5 btst.l #1,d2
- beq al_jp6
- addq.w #1,(a5)
- al_jp6 btst.l #2,d2
- beq al_jp7
- subq.w #1,2(a5)
- al_jp7 btst.l #3,d2
- beq al_jpe
- addq.w #1,2(a5)
- al_jpe move.w (a5),d0
- move.w 2(a5),d1
- add.l #14,a5
- move.l a5,palien
- bsr sprite
- bra al_loop
- eal_loop:
- rts
-
- exit bsr resmou
- clr.w -(a7)
- trap #1
-
- *initialise variables
- init_vars:
- move.w #100,sx
- move.w #100,sy
- move.l alien_blok,palien
- move.l palien,a0
- move.l #0,(a0)+
- move.l #0,(a0)
- move.l item_blok,pitem
- move.w #0,item_count
- move.w #0,collector
- move.w #0,extras
- rts
- *Draw screen display (inc. lives,fuel,etc)
- draw_screen:
- bsr drw_blocks
- draw #9,#9,#311,#9
- draw #9,#9,#9,#151
- draw #9,#151,#311,#151
- draw #311,#151,#311,#9
- draw #8,#8,#312,#8
- draw #8,#8,#8,#152
- draw #8,#152,#312,#152
- draw #312,#152,#312,#8
- move.l logo,a0
- move.w #12,d0
- move.w #160,d1
- bsr sprite
- move.l fuellogo,a0
- move.w #130,d0
- move.w #155,d1
- bsr sprite
- bdraw #155,#155,#307,#155
- bdraw #155,#158,#307,#158
- locate 5,0
- print ':SCORE'
- locate 26,0
- print 'HISCORE:'
- locate 34,0
- nprint hiscore
- drw_lvs move.w lives,dspt
- move.w #280,palien
- d_lives move.w palien,d0
- move.w #170,d1
- move.l worml,a0
- jsr sprite
- sub.w #35,palien
- sub.w #1,dspt
- cmp.w #0,dspt
- bne d_lives
- rts
- *DRAW OUT A SCREEN FROM A SCREEN DESCRIPTION
- drw_blocks:
- cls
- move.l this_screen,a5
- drwscrlp:
- move.w (a5)+,d2
- move.w (a5)+,d0
- move.w (a5)+,d1
- move.l a5,dspt
- cmp.w #0,d2
- beq end_drwscr
- cmp.w #1,d2
- bne drwscrj1
- move.l brick,a0
- drwscrj1:
- cmp.w #2,d2
- bne drwscrj2
- move.l blueball,a0
- drwscrj2:
- cmp.w #3,d2
- bne drwscrj3
- move.l grass,a0
- drwscrj3:
- cmp.w #4,d2
- bne drwscrj4
- move.w d0,sx
- move.w d1,sy
- bra drwscrlp
- drwscrj4:
- cmp.w #5,d2
- bne drwscrj5
- move.l tree,a0
- drwscrj5:
- cmp.w #6,d2
- bne drwscrj6
- move.l pillar,a0
- drwscrj6:
- cmp.w #100,d2
- bne drwscrj7
- move.l palien,a0
- move.l eyeball,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l (a5)+,(a0)+
- move.l (a5)+,(a0)+
- move.w (a5)+,(a0)+
- move.l a0,palien
- move.l #0,(a0)
- addq.l #2,a5
- bra drwscrlp
- drwscrj7:
- cmp.w #101,d2
- bne drwscrj8
- move.l palien,a0
- move.l platform,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l (a5)+,(a0)+
- move.l (a5)+,(a0)+
- move.w (a5)+,(a0)+
- move.l a0,palien
- move.l #0,(a0)
- addq.l #2,a5
- bra drwscrlp
- drwscrj8:
- cmp.w #200,d2
- bne drwscrj9
- move.l pitem,a0
- move.w #1,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l a0,pitem
- move.l #0,(a0)
- add.w #1,item_count
- move.l wormegg,a0
- drwscrj9:
- cmp.w #7,d2
- bne drwscrj10
- move.l hpipe,a0
- drwscrj10:
- cmp.w #8,d2
- bne drwscrj11
- move.l vpipe,a0
- drwscrj11:
- cmp.w #9,d2
- bne drwscrj12
- move.l conpipe,a0
- drwscrj12:
- cmp.w #102,d2
- bne drwscrj13
- move.l palien,a0
- move.l drill,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l (a5)+,(a0)+
- move.l (a5)+,(a0)+
- move.w (a5)+,(a0)+
- move.l a0,palien
- move.l #0,(a0)
- addq.l #2,a5
- bra drwscrlp
- drwscrj13:
- cmp.w #201,d2
- bne drwscrj14
- move.l pitem,a0
- move.w #2,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l a0,pitem
- move.l #0,(a0)
- move.l xtralife,a0
- drwscrj14:
- cmp.w #202,d2
- bne drwscrj15
- move.l pitem,a0
- move.w #3,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l a0,pitem
- move.l #0,(a0)
- move.l xtrafuel,a0
- drwscrj15:
- cmp.w #103,d2
- bne drwscrj16
- move.l palien,a0
- move.l mushroom,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l (a5)+,(a0)+
- move.l (a5)+,(a0)+
- move.w (a5)+,(a0)+
- move.l a0,palien
- move.l #0,(a0)
- addq.l #2,a5
- bra drwscrlp
- drwscrj16:
- cmp.w #10,d2
- bne drwscrj17
- move.l hbones,a0
- drwscrj17:
- cmp.w #11,d2
- bne drwscrj18
- move.l vbones,a0
- drwscrj18:
- cmp.w #12,d2
- bne drwscrj19
- move.l conbones,a0
- drwscrj19:
- cmp.w #203,d2
- bne drwscrj20
- move.l pitem,a0
- move.w #4,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l a0,pitem
- move.l #0,(a0)
- move.l bonus,a0
- drwscrj20:
- cmp.w #13,d2
- bne drwscrj21
- move.l sstal,a0
- drwscrj21:
- cmp.w #14,d2
- bne drwscrj22
- move.l lstal,a0
- drwscrj22:
- cmp.w #204,d2
- bne drwscrj23
- move.l pitem,a0
- move.w #5,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l a0,pitem
- move.l #0,(a0)
- move.l invun,a0
- drwscrj23:
- cmp.w #205,d2
- bne drwscrje
- move.l pitem,a0
- move.w #6,(a0)+
- move.w d0,(a0)+
- move.w d1,(a0)+
- move.l a0,pitem
- move.l #0,(a0)
- move.l freeze,a0
- drwscrje:
- bsr sprite
- move.l dspt,a5
- bra drwscrlp
- end_drwscr:
- move.l a5,next_screen
- rts
-
- *check for alien contact
- check_death:
- move.w #0,d4
- move.l alien_blok,a5
- c_loop move.l (a5)+,a0
- cmp.l #0,a0
- beq ec_loop
- move.w (a5)+,d0
- move.w (a5),d1
- add.l #12,a5
- add.w 2(a0),d0
- add.w 4(a0),d1
- move.w sx,d2
- move.w sy,d3
- cmp.w d2,d0
- blt c_loop
- cmp.w d3,d1
- blt c_loop
- sub.w 2(a0),d0
- sub.w 4(a0),d1
- sub.w #18,d1
- sub.w #40,d0
- cmp.w d2,d0
- bgt c_loop
- cmp.w d3,d1
- bgt c_loop
- move.w #1,d4
- bra c_loop
- ec_loop rts
-
- * check for item contact
- check_item:
- cmp.w #0,collector
- bne get_egglp
- move.l item_blok,a5
- ci_loop move.w (a5)+,d5
- cmp.w #0,d5
- beq eci_loop
- move.w (a5)+,d0
- move.w (a5)+,d1
- add.w #18,d0
- add.w #18,d1
- move.w sx,d2
- move.w sy,d3
- cmp.w d2,d0
- blt ci_loop
- cmp.w d3,d1
- blt ci_loop
- sub.w #40,d1
- sub.w #61,d0
- cmp.w d2,d0
- bgt ci_loop
- cmp.w d3,d1
- bgt ci_loop
- cmp.w #2,d5 * EXTRA LIFE OBJECT
- bne ci_loopj1
- add.w #1,item_count
- add.w #1,lives
- movem.l d0-d5,-(a7)
- bsr drw_lvs
- movem.l (a7)+,d0-d5
- ci_loopj1:
- cmp.w #3,d5 * EXTRA FUEL OBJECT
- bne ci_loopj2
- add.w #1,item_count
- move.w #600,fuel
- ci_loopj2:
- cmp.w #4,d5 * BONUS DIAMOND
- bne ci_loopj3
- add.w #1,item_count
- add.l #50,score
- ci_loopj3:
- cmp.w #5,d5 * INVULNERABILITY
- bne ci_loopj4
- add.w #1,item_count
- add.w #1,extras
- movem.l d5/a5,-(a7)
- move.l invun,a0
- move.w #172,d0
- move.w #160,d1
- bsr sprite
- movem.l (a7)+,d5/a5
- ci_loopj4:
- cmp.w #6,d5 * FREEZE
- bne ci_loopj5
- add.w #1,item_count
- add.w #2,extras
- movem.l d5/a5,-(a7)
- move.l freeze,a0
- move.w #172,d0
- move.w #160,d1
- bsr sprite
- movem.l (a7)+,d5/a5
- ci_loopj5:
- add.l #10,score
- sub.w #1,item_count
- sub.l #4,a5
- move.l a5,stor_pointer
- move.w #8,collector
- cmp.w #1,d5
- bne get_sndj1
- sound #4
- get_sndj1:
- cmp.w #1,d5
- beq get_egglp
- sound #1
- get_egglp:
- move.l stor_pointer,a5
- move.w (a5),d0
- move.w 2(a5),d1
- move.l getegg,a0
- bsr sprite
- sub.w #1,collector
- cmp.w #0,collector
- bne eci_loop
- move.l stor_pointer,a5
- move.l #99999999,(a5)+
- bra ci_loop
- eci_loop rts
-
- *check for ground underneath worm
- check_for_ground:
- clr.w count
- move.w #20,d4
- move.w sx,-(a7)
- move.w sy,-(a7)
- add.w #21,sy
- add.w #40,sx
- chklp1 pget sx,sy
- add.w d0,count
- subq.w #2,sx
- dbra d4,chklp1
- move.w (a7)+,sy
- move.w (a7)+,sx
- cmp.w #0,count
- bne echk1a
- btst #0,d5
- bne echk1a
- bset #1,d5
- bra echk1
- echk1a bclr #1,d5
- echk1 clr.w count
- move.w #20,d4
- move.w sx,-(a7)
- move.w sy,-(a7)
- sub.w #2,sy
- add.w #40,sx
- chklp2 pget sx,sy
- add.w d0,count
- subq.w #2,sx
- dbra d4,chklp2
- move.w (a7)+,sy
- move.w (a7)+,sx
- cmp.w #0,count
- beq echk2
- bclr #0,d5
- echk2 clr.w count
- move.w #9,d4
- move.w sx,-(a7)
- move.w sy,-(a7)
- add.w #18,sy
- sub.w #2,sx
- chklp3 pget sx,sy
- add.w d0,count
- subq.w #2,sy
- dbra d4,chklp3
- move.w (a7)+,sy
- move.w (a7)+,sx
- cmp.w #0,count
- beq echk3
- bclr #2,d5
- echk3 clr.w count
- move.w #9,d4
- move.w sx,-(a7)
- move.w sy,-(a7)
- add.w #18,sy
- add.w #42,sx
- chklp4 pget sx,sy
- add.w d0,count
- subq.w #2,sy
- dbra d4,chklp4
- move.w (a7)+,sy
- move.w (a7)+,sx
- cmp.w #0,count
- beq echk4
- bclr #3,d5
- echk4 rts
-
- *VARIABLES
- sx dc.w 10
- sy dc.w 10
- dspt dc.l 0
- lst_dir dc.w 0
- count dc.w 0
- item_count:
- dc.w 0
- collector:
- dc.w 0
- stor_pointer:
- dc.l 0
- this_screen:
- dc.l 0
- next_screen:
- dc.l 0
- screen_num:
- dc.w 0
- prev_dir:
- dc.w 0
- lives dc.w 0
- fuel dc.w 0
- score dc.l 0
- hiscore:
- dc.l 500
- last_score:
- dc.l 0
- textp dc.l 0
- sb dc.l 0
- extras dc.w 0
- nwormr dc.b 'SPRITES\WORMR.SPR',0
- nworml dc.b 'SPRITES\WORML.SPR',0
- nwormd dc.b 'SPRITES\WORMD.SPR',0
- nwormu dc.b 'SPRITES\WORMU.SPR',0
- nbrick dc.b 'SPRITES\BRICK.SPR',0
- nmushroom:
- dc.b 'SPRITES\MUSHROOM.SPR',0
- nscrn1 dc.b 'SPRITES\SCREEN1.SCR',0
- ngrass dc.b 'SPRITES\GRASST.SPR',0
- nblueball:
- dc.b 'SPRITES\BLUEBALL.SPR',0
- nlogo dc.b 'SPRITES\WORMLOGO.SPR',0
- nsstal dc.b 'SPRITES\SHORSTAL.SPR',0
- nlstal dc.b 'SPRITES\LONGSTAL.SPR',0
- nbonus dc.b 'SPRITES\BONUS.SPR',0
- ninvun dc.b 'SPRITES\INVUN.SPR',0
- nfreeze dc.b 'SPRITES\FREEZE.SPR',0
- ngameover:
- dc.b 'SPRITES\GAMEOVER.SPR',0
- music dc.b 'MUSIC.PAF',0
- ntree dc.b 'SPRITES\TREE.SPR',0
- npillar dc.b 'SPRITES\PILLAR.SPR',0
- nvbones dc.b 'SPRITES\VBONES.SPR',0
- nhbones dc.b 'SPRITES\HBONES.SPR',0
- nconbones:
- dc.b 'SPRITES\CONBONES.SPR',0
- nvpipe dc.b 'SPRITES\VPIPE.SPR',0
- nhpipe dc.b 'SPRITES\HPIPE.SPR',0
- nconpipe:
- dc.b 'SPRITES\CONPIPE.SPR',0
- neyeball:
- dc.b 'SPRITES\EYEBALL.SPR',0
- nplatform:
- dc.b 'SPRITES\PLATFORM.SPR',0
- ndrill dc.b 'SPRITES\DRILL.SPR',0
- ntitles dc.b 'SPRITES\TITLES.SCR',0
- nwormdie:
- dc.b 'SPRITES\WORMDIE.SPR',0
- nwormegg:
- dc.b 'SPRITES\WORMEGG.SPR',0
- ngetegg dc.b 'SPRITES\GETEGG.SPR',0
- nwelldone:
- dc.b 'SPRITES\WELLDONE.SPR',0
- nxtralife:
- dc.b 'SPRITES\XTRALIFE.SPR',0
- nfuellogo:
- dc.b 'SPRITES\FUEL.SPR',0
- nsoundfx:
- dc.b 'SOUNDS.SND',0
- nxtrafuel:
- dc.b 'SPRITES\XTRAFUEL.SPR',0
- credits dc.b 'WORM - The story of "OOEY GOOEY",your average young worm'
- dc.b ' out trying to save wormkind from a land invaded by '
- dc.b 'monsters. No fighting though - worms are not like that.'
- dc.b ' Ooey sets out to rescue the next generation of worms '
- dc.b 'and take them away to safety.......'
- dc.b 'Guide Ooey in his mission - use his helicopter pack and '
- dc.b 'perhaps collect a bonus or two along the way.'
- dc.b ' "WORM" is a product of DATA UNCERTAIN Software.'
- dc.b ' (C)1991, Data Uncertain Software....'
- dc.b 'Sound, Graphics & Program code by Craig Graham.'
- dc.b ' Additional ideas courtesy of people who happened to '
- dc.b 'pass by. Thanks go to Steven for the abuse, Mr & Mrs '
- dc.b 'Graham for the electricity, and to Andrea for showing a '
- dc.b 'healthy interest in something that bores her silly. '
- dc.b 'Thanks to Pop Will Eat Itself for inspiration. '
- dc.b 'Thanks also to the COZMIK OYSTERZ (Mr Hancock, Trev the'
- dc.b ' Fish, Dan the Man & Jon E Bass). Watch out for '
- dc.b 'Mixing Desk Pro v1.2 & Sprite Animator IV, as used in '
- dc.b 'the developement of this game. Compliments, comments, '
- dc.b 'job offers and MONEY can be sent to CRAIG GRAHAM, Care Of 46 '
- dc.b 'SCHOOL RD, LANGOLD, WORKSOP, NOTTS, S81 9PY. TEL (0909)'
- dc.b ' 732788. (Weekends only.) '
- dc.b 'Midweek correspondance via BAe SPACE SYSTEMS Stevenage, Herts.'
- dc.b ' Care of P W Romain, Training Department. '
- dc.b 'CRAIG LOVES ANDREA . . . . CRAIG LOVES ANDREA. . . . '
- dc.b 'CRAIG LOVES ANDREA . . . . CRAIG LOVES ANDREA. . . . . . . . . . That could be a cheat code ?'
- dc.b ' ',0
- e_credits:
- dc.b 'And thus Ooey Gooey rescued the next generation of worm'
- dc.b 'kind. Thanks to your help the wormeggs all hatched, and'
- dc.b ' the Newey Gooeys (baby worms) lived happily ever after'
- dc.b '. . . . . . . . . . . ',0
- cheat_code:
- dc.b 0,'craig loves andrea',255
- cnop 0,2
- wormr dc.l 0
- worml dc.l 0
- wormd dc.l 0
- wormu dc.l 0
- wormdie dc.l 0
- brick dc.l 0
- sstal dc.l 0
- lstal dc.l 0
- invun dc.l 0
- freeze dc.l 0
- mushroom:
- dc.l 0
- screen1 dc.l 0
- eyeball dc.l 0
- vpipe dc.l 0
- hpipe dc.l 0
- conpipe dc.l 0
- vbones dc.l 0
- hbones dc.l 0
- conbones:
- dc.l 0
- bonus dc.l 0
- platform:
- dc.l 0
- xtralife:
- dc.l 0
- drill dc.l 0
- blueball:
- dc.l 0
- grass dc.l 0
- logo dc.l 0
- titles dc.l 0
- gameover:
- dc.l 0
- tree dc.l 0
- pillar dc.l 0
- wormegg dc.l 0
- getegg dc.l 0
- fuellogo:
- dc.l 0
- xtrafuel:
- dc.l 0
- welldone:
- dc.l 0
- soundfx dc.l 0
- alien_blok:
- dc.l 0
- palien dc.l 0
- item_blok:
- dc.l 0
- pitem dc.l 0
- load_data:
- lea.l nlogo(pc),a0
- move.l logo,a1
- bsr spload
- move.w #110,d0
- move.w #50,d1
- move.l logo,a0
- bsr sprite
- lea.l nwormr(pc),a0
- move.l wormr,a1
- bsr spload
- lea.l nwormdie(pc),a0
- move.l wormdie,a1
- bsr spload
- lea.l nwormegg(pc),a0
- move.l wormegg,a1
- bsr spload
- lea.l ngetegg(pc),a0
- move.l getegg,a1
- bsr spload
- lea.l ninvun(pc),a0
- move.l invun,a1
- bsr spload
- lea.l ntitles(pc),a0
- move.l titles,a1
- bsr spload
- lea.l nmushroom(pc),a0
- move.l mushroom,a1
- bsr spload
- lea.l nwelldone(pc),a0
- move.l welldone,a1
- bsr spload
- lea.l nlstal(pc),a0
- move.l lstal,a1
- bsr spload
- lea.l nsstal(pc),a0
- move.l sstal,a1
- bsr spload
- lea.l nbonus(pc),a0
- move.l bonus,a1
- bsr spload
- lea.l ngameover(pc),a0
- move.l gameover,a1
- bsr spload
- lea.l nworml(pc),a0
- move.l worml,a1
- bsr spload
- lea.l nwormd(pc),a0
- move.l wormd,a1
- bsr spload
- lea.l nwormu(pc),a0
- move.l wormu,a1
- bsr spload
- lea.l nhpipe(pc),a0
- move.l hpipe,a1
- bsr spload
- lea.l nvbones(pc),a0
- move.l vbones,a1
- bsr spload
- lea.l nconbones(pc),a0
- move.l conbones,a1
- bsr spload
- lea.l nhbones(pc),a0
- move.l hbones,a1
- bsr spload
- lea.l nvpipe(pc),a0
- move.l vpipe,a1
- bsr spload
- lea.l nconpipe(pc),a0
- move.l conpipe,a1
- bsr spload
- lea.l nbrick(pc),a0
- move.l brick,a1
- bsr spload
- lea.l nblueball(pc),a0
- move.l blueball,a1
- bsr spload
- lea.l npillar(pc),a0
- move.l pillar,a1
- bsr spload
- lea.l ntree(pc),a0
- move.l tree,a1
- bsr spload
- lea.l ngrass(pc),a0
- move.l grass,a1
- bsr spload
- lea.l neyeball(pc),a0
- move.l eyeball,a1
- bsr spload
- lea.l nplatform(pc),a0
- move.l platform,a1
- bsr spload
- lea.l ndrill(pc),a0
- move.l drill,a1
- bsr spload
- lea.l nxtralife(pc),a0
- move.l xtralife,a1
- bsr spload
- lea.l nfuellogo(pc),a0
- move.l fuellogo,a1
- bsr spload
- lea.l nxtrafuel(pc),a0
- move.l xtrafuel,a1
- bsr spload
- lea.l nscrn1(pc),a0
- move.l screen1,a1
- bsr spload
- lea.l nsoundfx(pc),a0
- move.l soundfx,a1
- bsr spload
- lea.l nfreeze(pc),a0
- move.l freeze,a1
- bsr spload
- rts
- *get memory blocks
- init_blocks:
- move.l #9000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,eyeball
- move.l #9000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,mushroom
- move.l #300,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,titles
- move.l #450,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,soundfx
- move.l #600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,xtrafuel
- move.l #600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,invun
- move.l #600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,freeze
- move.l #600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,bonus
- move.l #800,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,fuellogo
- move.l #600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,xtralife
- move.l #4150,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,gameover
- move.l #4500,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,drill
- move.l #7500,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,wormdie
- move.l #2200,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,getegg
- move.l #800,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,vpipe
- move.l #1600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,conpipe
- move.l #800,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,hpipe
- move.l #800,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,vbones
- move.l #1600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,conbones
- move.l #800,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,hbones
- move.l #4000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,welldone
- move.l #3000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,platform
- move.l #1000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,alien_blok
- move.l #1000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,item_blok
- move.l #3300,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,wormr
- move.l #3300,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,worml
- move.l #900,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,wormd
- move.l #850,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,wormegg
- move.l #3000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,logo
- move.l #900,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,blueball
- move.l #900,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,pillar
- move.l #910,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,grass
- move.l #910,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,tree
- move.l #910,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,brick
- move.l #600,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,sstal
- move.l #1150,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,lstal
- move.l #6000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,wormu
- move.l #10000,-(a7)
- move.w #$48,-(a7)
- trap #1
- addq.l #6,a7
- move.l d0,screen1
- rts
- *TITLEPAGE/MAIN MENU
- title_page:
- bsr draw_title_page
- music_on
- lea.l credits(pc),a5
- move.l a5,textp
- move.w #0,item_count
- menu_loop:
- bsr vbi
- bsr ualiens
- bsr scrolly_message
- lea.l joyp0(pc),a0
- move.b 1(a0),d0
- btst #7,d0
- bne emenu_loop
- jsr inkey
- or.w #32,d0
- cmp.w #'i',d0
- bne menu_loop
- bsr instructions
- bra menu_loop
- emenu_loop:
- lea.l joyp0(pc),a0
- move.b 1(a0),d0
- btst #7,d0
- bne emenu_loop
- music_off
- bra start
- draw_title_page:
- bsr init_vars
- move.l titles,this_screen
- bsr drw_blocks
- move.l logo,a0
- move.w #5,d0
- move.w #5,d1
- bsr sprite
- move.l logo,a0
- move.w #210,d0
- move.w #5,d1
- bsr sprite
- locate 10,20
- print 'PRESS-FIRE-TO-START'
- locate 6,21
- print 'PRESS-"I"-FOR-INSTRUCTIONS'
- locate 40,26
- rts
- instructions:
- bsr partcls
- locate 8,1
- print '<<<<<<INSTRUCTIONS>>>>>>>'
- locate 7,4
- print 'EVIL-EYEBALL'
- locate 7,9
- print 'MAGIC-MUSHROOM'
- locate 7,13
- print 'RENAGADE-DRILL-BIT'
- locate 7,18
- print 'FLYING-SAUCER'
- locate 10,21
- print 'AVOID-ALL-OF-THESE.....'
- move.w #300,score
- locate 40,26
- instrlp1:
- bsr vbi
- move.l eyeball,a0
- move.w #20,d0
- move.w #20,d1
- jsr sprite
- move.l mushroom,a0
- move.w #20,d0
- move.w #60,d1
- jsr sprite
- move.l drill,a0
- move.w #20,d0
- move.w #100,d1
- jsr sprite
- move.l platform,a0
- move.w #20,d0
- move.w #140,d1
- jsr sprite
- bsr scrolly_message
- lea.l joyp0(pc),a0
- move.b 1(a0),d0
- btst #7,d0
- bne emenu_loop
- subq.w #1,score
- cmp.w #0,score
- bne instrlp1
- bsr partcls
- locate 8,1
- print '<<<<<<INSTRUCTIONS>>>>>>>'
- locate 7,3
- print 'WORM-EGG'
- locate 7,6
- print 'BONUS-DIAMOND'
- locate 7,9
- print 'EXTRA-LIFE'
- locate 7,12
- print 'EXTRA-FUEL'
- locate 7,15
- print 'INVULNERABILITY'
- locate 7,18
- print 'FREEZE'
- locate 10,22
- print 'COLLECT-ALL-OF-THESE.....'
- move.w #300,score
- locate 40,26
- instrlp2:
- bsr vbi
- move.l wormegg,a0
- move.w #20,d0
- move.w #20,d1
- jsr sprite
- move.l bonus,a0
- move.w #20,d0
- move.w #45,d1
- jsr sprite
- move.l xtralife,a0
- move.w #20,d0
- move.w #70,d1
- jsr sprite
- move.l xtrafuel,a0
- move.w #20,d0
- move.w #95,d1
- jsr sprite
- move.l invun,a0
- move.w #20,d0
- move.w #120,d1
- jsr sprite
- move.l freeze,a0
- move.w #20,d0
- move.w #145,d1
- jsr sprite
- bsr scrolly_message
- lea.l joyp0(pc),a0
- move.b 1(a0),d0
- btst #7,d0
- bne emenu_loop
- subq.w #1,score
- cmp.w #0,score
- bne instrlp2
- bsr draw_title_page
- rts
- scrolly_message:
- cmp.w #0,item_count
- beq nextchr
- bsr scroll
- sub.w #1,item_count
- rts
- nextchr move.l textp,a0
- clr.l d0
- move.b (a0)+,d0
- cmp.w #0,d0
- bne nxtj1
- lea.l credits(pc),a5
- move.l a5,textp
- bra nextchr
- nxtj1 move.l a0,textp
- move.w d0,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- move.w #8,item_count
- bra scrolly_message
- partcls:
- move.l sb,a0
- partclslp:
- move.l #0,(a0)+
- move.l sb,d0
- add.l #$76c0,d0
- cmp.l d0,a0
- bne partclslp
- rts
- end_game:
- cls
- move.w #10,d0
- move.w #10,d1
- move.l welldone,a0
- bsr sprite
- move.w #220,d0
- move.w #10,d1
- move.l welldone,a0
- bsr sprite
- lea.l e_credits(pc),a5
- move.l a5,textp
- locate 39,40
- music_on
- egame_loop:
- bsr vbi
- bsr scrolly_message2
- lea.l joyp0(pc),a0
- move.b 1(a0),d0
- btst #7,d0
- beq egame_loop
- bra title_page
-
- scrolly_message2:
- cmp.w #0,item_count
- beq nextchr2
- bsr scroll
- sub.w #1,item_count
- rts
- nextchr2:
- move.l textp,a0
- clr.l d0
- move.b (a0)+,d0
- cmp.w #0,d0
- bne nxtj1_2
- lea.l e_credits(pc),a5
- move.l a5,textp
- bra nextchr2
- nxtj1_2 move.l a0,textp
- move.w d0,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- move.w #8,item_count
- bra scrolly_message2
-
- scroll move.w #0,d2
- move.w #0,d3
- move.w #0,d4
- move.w #0,d5
- move.l sb,a0
- add.l #$7800,a0
- move.l a0,a1
- add.l #$500,a1
- scrlp subq.l #2,a1
- move.w (a1),d1
- move.w #0,d0
- lsl.w #1,d1
- bcc scrj1
- move.w #1,d0
- scrj1 cmp.w #0,d2
- beq scrj2
- bset #0,d1
- scrj2 move.w d1,(a1)
- move.w d0,d2
- subq.l #2,a1
- move.w (a1),d1
- move.w #0,d0
- lsl.w #1,d1
- bcc scrj3
- move.w #1,d0
- scrj3 cmp.w #0,d3
- beq scrj4
- bset #0,d1
- scrj4 move.w d1,(a1)
- move.w d0,d3
- subq.l #2,a1
- move.w (a1),d1
- move.w #0,d0
- lsl.w #1,d1
- bcc scrj5
- move.w #1,d0
- scrj5 cmp.w #0,d4
- beq scrj6
- bset #0,d1
- scrj6 move.w d1,(a1)
- move.w d0,d4
- subq.l #2,a1
- move.w (a1),d1
- move.w #0,d0
- lsl.w #1,d1
- bcc scrj7
- move.w #1,d0
- scrj7 cmp.w #0,d5
- beq scrj8
- bset #0,d1
- scrj8 move.w d1,(a1)
- move.w d0,d5
- cmp.l a0,a1
- bne scrlp
- rts
- *SUBROUTINE LIBRARY TO SUPPORT MACROS
- *=====================================
- dline: move.w #-1,lstlin(a0)
- move.w #$ffff,lnmask(a0)
- move.w #1,fgbp1(a0)
- move.w #1,fgbp2(a0)
- move.w #1,fgbp3(a0)
- move.w #0,fgbp4(a0)
- dc.w line
- rts
-
- bdline: move.w #-1,lstlin(a0)
- move.w #$ffff,lnmask(a0)
- move.w #1,fgbp1(a0)
- move.w #1,fgbp2(a0)
- move.w #1,fgbp3(a0)
- move.w #1,fgbp4(a0)
- dc.w line
- rts
-
- undline: move.w #-1,lstlin(a0)
- move.w #$ffff,lnmask(a0)
- move.w #0,fgbp1(a0)
- move.w #0,fgbp2(a0)
- move.w #0,fgbp3(a0)
- move.w #0,fgbp4(a0)
- dc.w line
- rts
- dbar: move.w #-1,lstlin(a0)
- move.w #$ffff,lnmask(a0)
- move.w #1,fgbp1(a0)
- move.w #1,fgbp2(a0)
- move.w #1,fgbp3(a0)
- move.w #0,fgbp4(a0)
- dc.w fdrect
- rts
- clrscr move.w #27,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- move.w #'E',-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- rts
- linea dc.w $a000
- move.l a0,parm
- rts
- *plot a point
- rplot: move.l sb,a0
- mulu #160,d1
- move.w d0,d3
- lsr #4,d3
- lsl #2,d3
- add d3,d3
-
- add d3,d1
- adda d1,a0
- and #$f,d0
- neg d0
- add #15,d0
-
- moveq #3,d3
- color_loop:
- move (a0),d1
- lsr #1,d2
- bcs.s set_bit
- bclr d0,d1
- bra write_back
- set_bit:
- bset d0,d1
- write_back:
- move d1,(a0)+
- dbra d3,color_loop
- rts
- *get a point
- rpget: clr.l d2
- move.l sb,a0
- mulu #160,d1
- move.w d0,d3
- lsr #4,d3
- lsl #2,d3
- add d3,d3
-
- add d3,d1
- adda d1,a0
- addq.l #8,a0
- and #$f,d0
- neg d0
- add #15,d0
-
- moveq #3,d3
- pcolor_loop:
- lsl #1,d2
- move -(a0),d1
- btst d0,d1
- bne pset_bit
- bclr #0,d2
- bra pwrite_back
- pset_bit:
- bset #0,d2
- pwrite_back:
- dbra d3,pcolor_loop
- move.w d2,d0
- rts
- *print a string
- prnt movem.l a0-a3/d0-d3,-(a7)
- move.l a0,-(a7)
- move.w #9,-(a7)
- trap #1
- addq.l #6,a7
- movem.l (a7)+,a0-a3/d0-d3
- rts
-
- *sets color , d0=color to set , d1=rgb value
- colset movem.l a0-a3/d0-d3,-(a7)
- move.w d1,-(a7)
- move.w d0,-(a7)
- move.w #7,-(a7)
- trap #14
- addq.l #6,a7
- movem.l (a7)+,d0-d3/a0-a3
- rts
- *SEND SOUND COMMANDS
- *------------------------------
- sndcom mulu.w #40,d0
- move.l soundfx,a0
- add.l d0,a0
- move.l a0,-(a7)
- move.w #32,-(a7)
- trap #14
- addq.l #6,a7
- rts
-
- * JOYSTICK ROUTINES
- *-----------------------------------------------------
- *INITIALISATION ROUTINE TO BE CALLED ONCE
- * AT THE START OF YOUR PROGRAM
- injoy move.w #$14,-(a7)
- move.w #4,-(a7)
- move.w #3,-(a7)
- trap #13
- addq.l #6,a7
- move.w #34,-(a7)
- trap #14
- addq.l #2,a7
- movea.l d0,a0
- adda.l #24,a0
- lea oldpac(pc),a1
- move.l (a0),(a1)
- lea joypac(pc),a1
- move.l a1,(a0)
- rts
- *JOYSTK PACKET HANDLER
- *THIS ROUTINE IS CALLED BY TH O/S
- joypac movem.l a0/a1,-(a7)
- lea joyp0(pc),a1
- move.b 1(a0),(a1)
- move.b 2(a0),1(a1)
- movem.l (a7)+,a0/a1
- rts
- *RESTORE NORMAL MOUSE CONTROL
- *CALL THIS ROUTINE TO RETURN TO NORMAL MOUSE CONTROL
- resmou move.w #34,-(a7)
- trap #14
- addq.l #2,a7
- movea.l d0,a0
- adda.l #24,a0
- move.l oldpac(pc),(a0)
- move.w #128,-(a7)
- move.w #4,-(a7)
- move.w #3,-(a7)
- trap #13
- addq.l #6,a7
- move.w #1,-(a7)
- move.w #4,-(a7)
- move.w #3,-(a7)
- trap #13
- addq.l #6,a7
- rts
- oldpac dc.l 0
- joyp0 dc.w 0
- ds.b 2
- * { XBIOS CALL $25 }
- *WAITS FOR THE NEXT VERTICAL BLANK AND THEN RETURNS.
- *-------------------------------------------------------
- vbi move.w #37,-(a7)
- trap #14
- addq.l #2,a7
- rts
- *PRINT DECIMAL NUMBER AT PRESENT SCREEN LOCATION...
- * D0=NUMBER TO PRINT
- *-----------------------
- prtdec move.l d0,d1
- divu.w #10000,d1
- move.w d1,d2
- bsr prtdig
- lsr.l #8,d1
- lsr.l #8,d1
- divu.w #1000,d1
- move.w d1,d2
- bsr prtdig
- asr.l #8,d1
- asr.l #8,d1
- divu.w #100,d1
- move.w d1,d2
- bsr prtdig
- lsr.l #8,d1
- lsr.l #8,d1
- divu.w #10,d1
- move.w d1,d2
- bsr prtdig
- lsr.l #8,d1
- lsr.l #8,d1
- move.w d1,d2
- bsr prtdig
- rts
- *print digit 0-9
- prtdig movem.l d0-d2/a0-a2,-(a7)
- add.w #$30,d2
- move.w d2,-(a7)
- move.w #2,-(a7)
- trap #1
- addq.l #4,a7
- movem.l (a7)+,d0-d2/a0-a2
- rts
- * { TOS CALL $06 }
- *This works the same as INKEY$ in basic
- *the ascii code will be returned in D0
- inkey move.w #$00ff,-(a7)
- move.w #6,-(a7)
- trap #1
- addq.l #4,a7
- rts
- *---------------------------------------------------
- *SPRITE ROUTINE (version 2.0)
- * use with DESII.BAS generated sprites.
- *To Call :- LEA.L <sprite name>(pc),a0
- * MOVE.W #X,D0
- * MOVE.W #Y,D1
- * JSR SPRITE
- *------------------------------------------
- sprite lea.l bitblt(pc),a6
- move.l a0,a3
- move.w (a0),d4 *max_f
- move.w 2(a0),(a6) *x-size
- move.w 4(a0),2(a6) *y-size
- move.w 6(a0),24(a6) *line-length
- move.w 8(a0),d2 *present frame No.(0-max_f)
- move.w 10(a0),d3 *size of frame(bytes)
- mulu.w d2,d3 *frame*size_f
- add.l #12,d3 *skip header
- add.l d3,a0 *location of image to draw
- move.l a0,18(a6) *put l_img into bitblt
- move.w d0,28(a6) *x-pos
- move.w d1,30(a6) *y-pos
- add.w #1,d2 *add 1 to frame pointer
- cmp.w d4,d2
- bne sprit2 *is next frame=max_f ?
- move.w #0,d2 *if yes,next frame=0
- sprit2 move.w d2,8(a3) *stor next frame
- lea.l bitblt(pc),a6
- move.w #4,4(a6)
- dc.w $a007 *blit
- rts
- * SAMPLE SEQUENCER
- * *.PAF FILE PLAYER ROUTINE 1
- * (not under interupt)
- *================================
- next_sam:
- move.l p_sam,a0
- move.l (a0)+,d0
- move.l (a0)+,d1
- sub.l d0,d1
- add.l l_sam,d0
- move.l a0,p_sam
- lea.l spa(pc),a0
- move.l d0,(a0)+
- move.l d1,(a0)
- rts
-
- smp_cmnd MOVEM.L A0-A3/D0-D4,-(SP) save registers
- move.l l_tape,p_sam
- bsr next_sam
- MOVE.W #8,-(SP)
- MOVE.W #27,-(SP)
- TRAP #14
- ADDQ.L #4,SP enable timer b interrupt
- BSR super call supervisor mode
- MOVE.B #0,$FFFA1B stop timer b
- MOVE #7,-(SP)
- CLR -(SP)
- MOVE #28,-(SP)
- TRAP #14
- ADDQ.L #6,SP read sound chip port 7
- LEA port7(PC),A0
- MOVE.B D0,(A0) save port 7
- AND.W #192,D0
- ADD.W #63,D0
- MOVE #135,-(SP)
- MOVE D0,-(SP)
- MOVE #28,-(SP)
- TRAP #14
- ADDQ.L #6,SP load new value to port 7
- MOVE.L #$FF8800,A0
- MOVE.L #$FF8802,A1 sound chip address
- LEA sup(PC),A2 data for setting up sound chip
- MOVE.L #9,D0
- slp MOVE.B (A2)+,(A0)
- MOVE.B (A2)+,(A1)
- DBF D0,slp set up sound chip
- MOVE.L #8,D0 load coded sample rate
- MULU #4,D0 multiply for position in data table
- LEA sdt(PC),A2 load address of data table
- LEA ntbint(PC),A3 load address of interrupt routine
- MOVE.L A3,-(SP)
- MOVE.W 0(A2,D0),-(SP)
- MOVE.W 2(A2,D0),-(SP)
- MOVE.W #1,-(SP)
- MOVE.W #31,-(SP)
- TRAP #14
- ADD.L #12,SP start timer b
- BSR usuper exit supervisor mode
- MOVEM.L (SP)+,A0-A3/D0-D4 load registers
- RTS and exit...
-
- spa DS.L 2 interrupt routine variables
- sup DC.B 10,0,9,0,8,0,11,0,12,0 data for sound chip set up
- sd DC.B 10,0,9,0,8,0 data for sound chip shut down
- port7 DC.L 0 port7
-
- ;TIMER B INTERRUPT
-
- ntbint MOVEM.L A0-A2/D0-D2,-(SP) save registers
- LEA.L stable(PC),A1 address of data table
- LEA.L spa(PC),A2 variables address
- SUBQ.L #1,4(A2)
- BEQ spexit decrement and test counter
- ntbt MOVE.L (A2),A0 sample address
- ADDQ.L #1,(A2) increment sample address
- CLR.L d1
- CLR.L d2 clear data registers
- MOVE.B (A0),D1 read sample
- lsr #2,d1
- LSL #1,D1 byte to word value
- MOVE.B 0(A1,D1.w),D0 read data from sound table
- MOVE.B $1(A1,D1.W),D1 data to voice C register
- MOVE D0,D2
- LSR #4,D2 put volume in lowest nibble
- ANDI #$F,D0 mask voice b
- MOVE.B #8,$FF8800 select voice a
- MOVE.B D2,$FF8802 write volume
- MOVE.B #9,$FF8800 select voice b
- MOVE.B D1,$FF8802 write volume
- MOVE.B #$A,$FF8800 select voice c
- MOVE.B D0,$FF8802 write volume
- MOVEM.L (SP)+,A0-A2/D0-D2 load registers
- BCLR #0,$FFFA0F acknowledge interrupt
- RTE and exit...
- zeros dc.l 0,0,0
- spexit
- move.l p_sam,a0
- addq.l #4,a0
- cmp.l #0,(a0)
- beq spexit1
- bsr next_sam
- bra ntbt
- spexit1 MOVE.L #$FF8800,A0
- MOVE.L #$FF8802,A1 sound chip address for fast accsess
- LEA sd(PC),A2 data for sound chip shut down
- MOVE.L #5,D0
- selp MOVE.B (A2)+,(A0)
- MOVE.B (A2)+,(A1)
- DBF D0,selp output data
- LEA port7(PC),A2
- MOVE.B #7,(A0)
- MOVE.B (A2),(A1) load port 7
- MOVEM.L (SP)+,A0-A2/D0-D2 load registers
- MOVE.B #0,$FFFA1B timer b off
- BCLR #0,$FFFA0F acknowledge interrupt
- RTE and exit
- stable DC.W $0000
- DC.W $0000
- DC.W $0001
- DC.W $0002
- DC.W $0003
- DC.W $0004
- DC.W $0004
- DC.W $0005
- DC.W $0005
- DC.W $0005
- DC.W $0006
- DC.W $0006
- DC.W $0006
- DC.W $0006
- DC.W $0007
- DC.W $0007
- DC.W $0007
- DC.W $0007
- DC.W $0007
- DC.W $0008
- DC.W $0008
- DC.W $0008
- DC.W $0008
- DC.W $0008
- DC.W $0208
- DC.W $0308
- DC.W $0308
- DC.W $0408
- DC.W $0408
- DC.W $0009
- DC.W $0009
- DC.W $0009
- DC.W $0009
- DC.W $0209
- DC.W $0309
- DC.W $0309
- DC.W $0409
- DC.W $0409
- DC.W $0509
- DC.W $0509
- DC.W $0509
- DC.W $0509
- DC.W $0609
- DC.W $0609
- DC.W $0609
- DC.W $0609
- DC.W $000A
- DC.W $020A
- DC.W $030A
- DC.W $040A
- DC.W $040A
- DC.W $050A
- DC.W $050A
- DC.W $050A
- DC.W $060A
- DC.W $060A
- DC.W $060A
- DC.W $160A
- DC.W $160A
- DC.W $000B
- DC.W $000B
- DC.W $000B
- DC.W $010B
- DC.W $010B
- DC.W $020B
- DC.W $030B
- DC.W $030B
- DC.W $040B
- DC.W $0408
- DC.W $050B
- DC.W $050B
- DC.W $060B
- DC.W $060B
- DC.W $060B
- DC.W $160B
- DC.W $070B
- DC.W $070B
- DC.W $070B
- DC.W $170B
- DC.W $170B
- DC.W $270B
- DC.W $080B
- DC.W $180B
- DC.W $280B
- DC.W $380B
- DC.W $380B
- DC.W $480B
- DC.W $480B
- DC.W $480B
- DC.W $000C
- DC.W $010C
- DC.W $020C
- DC.W $030C
- DC.W $030C
- DC.W $040C
- DC.W $040C
- DC.W $050C
- DC.W $250C
- DC.W $060C
- DC.W $060C
- DC.W $360C
- DC.W $070C
- DC.W $270C
- DC.W $370C
- DC.W $470C
- DC.W $470C
- DC.W $080C
- DC.W $280C
- DC.W $280C
- DC.W $380C
- DC.W $380C
- DC.W $480C
- DC.W $480C
- DC.W $580C
- DC.W $580C
- DC.W $090C
- DC.W $290C
- DC.W $390C
- DC.W $490C
- DC.W $490C
- DC.W $590C
- DC.W $590C
- DC.W $000D
- DC.W $010D
- DC.W $020D
- DC.W $030D
- DC.W $040D
- DC.W $040D
- DC.W $050D
- DC.W $050D
- DC.W $060D
- DC.W $060D
- DC.W $070D
- DC.W $070D
- DC.W $270D
- DC.W $270D
- DC.W $370D
- DC.W $370D
- DC.W $080D
- DC.W $080D
- DC.W $180D
- DC.W $280D
- DC.W $280D
- DC.W $380D
- DC.W $480D
- DC.W $090D
- DC.W $290D
- DC.W $390D
- DC.W $490D
- DC.W $590D
- DC.W $690D
- DC.W $0A0D
- DC.W $2A0D
- DC.W $3A0D
- DC.W $4A0D
- DC.W $5A0D
- DC.W $5A0D
- DC.W $6A0D
- DC.W $6A0D
- DC.W $7A0D
- DC.W $7A0D
- DC.W $0B0D
- DC.W $0B0D
- DC.W $3B0D
- DC.W $4B0D
- DC.W $4B0D
- DC.W $5B0D
- DC.W $5B0D
- DC.W $6B0D
- DC.W $6B0D
- DC.W $6B0D
- DC.W $7B0D
- DC.W $7B0D
- DC.W $7B0D
- DC.W $8B0D
- DC.W $8B0D
- DC.W $8B0D
- DC.W $8B0D
- DC.W $8B0D
- DC.W $000E
- DC.W $000E
- DC.W $010E
- DC.W $020E
- DC.W $030E
- DC.W $040E
- DC.W $040E
- DC.W $050E
- DC.W $050E
- DC.W $060E
- DC.W $060E
- DC.W $260E
- DC.W $070E
- DC.W $070E
- DC.W $270E
- DC.W $080E
- DC.W $080E
- DC.W $090E
- DC.W $490E
- DC.W $590E
- DC.W $690E
- DC.W $0A0E
- DC.W $0A0E
- DC.W $3A0E
- DC.W $3A0E
- DC.W $5A0E
- DC.W $5A0E
- DC.W $6A0E
- DC.W $6A0E
- DC.W $7A0E
- DC.W $7A0E
- DC.W $0B0E
- DC.W $4B0E
- DC.W $4B0E
- DC.W $5B0E
- DC.W $5B0E
- DC.W $6B0E
- DC.W $6B0E
- DC.W $7B0E
- DC.W $7B0E
- DC.W $8B0E
- DC.W $8B0E
- DC.W $9B0E
- DC.W $9B0E
- DC.W $9B0E
- DC.W $9B0E
- DC.W $0C0E
- DC.W $0C0E
- DC.W $3C0E
- DC.W $7C0E
- DC.W $8C0E
- DC.W $8C0E
- DC.W $8C0E
- DC.W $8C0E
- DC.W $8C0E
- DC.W $9C0E
- DC.W $9C0E
- DC.W $9C0E
- DC.W $9C0E
- DC.W $9C0E
- DC.W $9C0E
- DC.W $9C0E
- DC.W $AC0E
- DC.W $AC0E
- DC.W $AC0E
- DC.W $AC0E
- DC.W $AC0E
- DC.W $AC0E
- DC.W $000F
- DC.W $060F
- DC.W $060F
- DC.W $070F
- DC.W $070F
- DC.W $070F
- DC.W $080F
- DC.W $080F
- DC.W $080F data for sampled sounds
-
- super CLR.L -(SP)
- MOVE.W #$20,-(SP)
- TRAP #1
- ADD.L #$6,SP call supervisor
- LEA stksve(PC),A0
- MOVE.L D0,(A0) save stack
- RTS and exit...
-
- usuper LEA stksve(PC),A0
- MOVE.L (A0),D0
- MOVE.L D0,-(SP) load stack
- MOVE #$20,-(SP)
- TRAP #1
- ADDQ.L #6,SP back to user mode
- RTS and exit...
-
- sdt DC.W $E2,2,$E2,2,$76,2,$CA,1,$98,1
- DC.W $79,1,$65,1,$56,1,$50,1,$45,1
- DC.W $39,1,$36,1,$33,1,$30,1,$27,1
- DC.W $21,1,$10,1 data table for sample rates(data,control(timer b registers)
-
- stksve DS.L 1 stack save
-
- vbls DS.L 4 variables
-
- sample_init:
- move.l a0,n_tape
-
- move.l #4000,-(a7) *Get memory block for
- move.w #$48,-(a7) * "<*.PAF>".
- trap #1
- addq.l #6,a7
- move.l d0,l_tape
-
- move.l #200000,-(a7) *Get memory block for
- move.w #$48,-(a7) * "<sample>.SPL".
- trap #1
- addq.l #6,a7
- move.l d0,l_sam
-
- move.l n_tape,a0 *Load "<sequnce>.PAF"
- move.l l_tape,a2
- bsr sload
-
- move.l l_tape,a0 *Load "<sample>.SPL"
- move.l l_sam,a2
- bsr sload
-
- move.l l_tape,a0 *skip "filename"
- add.l #16,a0
- move.l a0,l_tape
- rts
-
- *variables
- l_tape dc.l 0
- n_tape dc.l 0
- l_sam dc.l 0
- p_sam dc.l 0
-
- sload move.l a2,edbuff
- move.w #0,-(a7)
- move.l a0,-(a7)
- move.w #$3d,-(a7)
- trap #1
- addq.l #8,a7
- tst.w d0
- bmi sload
- move.w d0,handle
- snxtbyt move.l edbuff,-(a7)
- move.l #100000,-(a7)
- move.w handle,-(a7)
- move.w #$3f,-(a7)
- trap #1
- adda.l #12,a7
- tst.l d0
- bmi sclose
- beq sclose
- move.l d0,d1
- add.l #100000,edbuff
- bra snxtbyt
- sclose move.l edbuff,d1
- add.l #100000,d1
- sub.l a2,d1
- move.w handle,-(a7)
- move.w #$3e,-(a7)
- trap #1
- addq.l #4,a7
- rts
- *LOAD SPRITE ('<name>.SPR')
- * To Call :- LEA.L SP<name>(pc),(a0)
- * LEA.L <name>(pc),(a1)
- * JSR SPLOAD
- *-----------------------
- spload move.l a0,f_len
- move.l a1,edbuff
- move.w #0,-(a7)
- move.l a0,-(a7)
- move.w #$3d,-(a7)
- trap #1
- addq.l #8,a7
- tst.w d0
- bmi spload
- move.w d0,handle
- clr.w -(a7)
- move.l f_len,-(a7)
- move.w #$4e,-(a7)
- trap #1
- addq.l #8,a7
- move.w #$2f,-(a7)
- trap #1
- addq.l #2,a7
- move.l d0,a0
- move.l 26(a0),f_len
- nxtbyt move.l edbuff,-(a7)
- move.l f_len,-(a7)
- move.w handle,-(a7)
- move.w #$3f,-(a7)
- trap #1
- adda.l #12,a7
- tst.l d0
- bmi close
- beq close
- move.l d0,d1
- add.l #512,edbuff
- bra nxtbyt
- close move.l edbuff,d1
- add.l #512,d1
- sub.l a2,d1
- move.w handle,-(a7)
- move.w #$3e,-(a7)
- trap #1
- addq.l #4,a7
- rts
- handle dc.w 0
- edbuff dc.l 0
- f_len dc.l 0
- bitblt dc.w 32
- dc.w 60
- dc.w 4
- dc.w 0
- dc.w 0
- dc.w $0303
- dc.w $0303
- dc.w 0
- dc.w 0
- dc.l $78000
- dc.w 8
- dc.w 16
- dc.w 2
- dc.w 0
- dc.w 0
- dc.l $78000
- dc.w 8
- dc.w 160
- dc.w 2
- dc.l 0,0,0,0,0,0,0,0,0
- fill_pattern:
- dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0
- dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0
- *LINE A PARAMETERS AND INTERFACE BLOCK
- *------------------------------------------
- *line A calls
- init equ 0
- line equ $a003
- fdrect equ $a005
- fdpoly equ $a006
- showm equ $a009
- hidem equ $a00a
- vlinwr equ 2
- contrl equ 4
- intin equ 8
- ptsin equ 12
- intout equ 16
- ptsout equ 20
- fgbp1 equ 24
- fgbp2 equ 26
- fgbp3 equ 28
- fgbp4 equ 30
- lstlin equ 32
- lnmask equ 34
- wrtmod equ 36
- x1 equ 38
- y1 equ 40
- x2 equ 42
- y2 equ 44
- patptr equ 46
- patmak equ 50
- multif equ 52
- sourcx equ 72
- sourcy equ 74
- destx equ 76
- desty equ 78
- fbase equ 84
- fwidth equ 88
- litema equ 92
- skewma equ 94
- parm ds.l 1
- end
-